import 'package:flutter/material.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'dart:io';
import 'dart:math';
import 'package:path_provider/path_provider.dart';

// 获取应用程序的版本号和构建号
class PackageInfoUtil {
  // 获取应用程序appid
  static Future<String> getAppId() async {
    final packageInfo = await PackageInfo.fromPlatform();
    return packageInfo.packageName; // 应用程序ID（如 com.example.app）
  }

  // 应用程序版本号
  static Future<String> getAppVersion() async {
    final packageInfo = await PackageInfo.fromPlatform();
    return packageInfo.version; // 版本号（如 1.0.0）
  }

  // 应用程序构建号
  static Future<String> getBuildNumber() async {
    final packageInfo = await PackageInfo.fromPlatform();
    return packageInfo.buildNumber; // 构建号（如 123）
  }

  // 获取手机型号
  static Future<String> getPhoneMode() async {
    final packageInfo = await PackageInfo.fromPlatform();

    // Combine various package identifiers to create a pseudo-fingerprint
    String fingerprint =
        '${packageInfo.packageName}-${packageInfo.version}-${packageInfo.buildNumber}';

    // Add platform information
    if (Platform.isAndroid) {
      fingerprint += '-android';
    } else if (Platform.isIOS) {
      fingerprint += '-ios';
    } else {
      fingerprint += '-${Platform.operatingSystem}';
    }

    return fingerprint; // Using app info as a fingerprint
  }

  // 计算缓存目录大小（单位：字节）
  static Future<int> calculateCacheSize() async {
    Directory cacheDir = await getTemporaryDirectory(); // 临时缓存目录
    Directory appDir = await getApplicationSupportDirectory(); // 应用支持目录

    int totalSize = 0;

    // 计算临时目录大小
    if (await cacheDir.exists()) {
      totalSize += await _getDirectorySize(cacheDir);
    }

    // 计算应用支持目录大小（可选）
    if (await appDir.exists()) {
      totalSize += await _getDirectorySize(appDir);
    }

    return totalSize;
  }

  // 递归计算目录大小
  static Future<int> _getDirectorySize(Directory dir) async {
    int size = 0;
    try {
      final files = dir.listSync(recursive: true);
      for (var file in files) {
        if (file is File) {
          size += await file.length();
        }
      }
    } catch (e) {
      debugPrint('计算大小失败: $e');
    }
    return size;
  }

  // 格式化字节为友好字符串（如 1.2MB）
  static String formatSize(int bytes) {
    if (bytes <= 0) return '0 B';
    const units = ['B', 'KB', 'MB', 'GB'];
    int digitGroups = (log(bytes) / log(1024)).floor();
    return '${(bytes / pow(1024, digitGroups)).toStringAsFixed(2)} ${units[digitGroups]}';
  }

  // 清理缓存
  static Future<void> clearCache() async {
    final tempDir = await getTemporaryDirectory(); // 获取应用专属缓存目录
    if (await tempDir.exists()) {
      // 只删除目录内容，不删除目录本身
      final files = tempDir.listSync();
      for (var entity in files) {
        try {
          if (entity is File) {
            await entity.delete();
          } else if (entity is Directory) {
            await entity.delete(recursive: true);
          }
        } catch (e) {
          debugPrint('无法删除 ${entity.path}: $e');
        }
      }
    }
  }
}
